Skip to content

feat(audeze): implement the real Maxwell protocol and add custom EQ - #591

Open
ModoloDev wants to merge 2 commits into
Sapd:masterfrom
ModoloDev:master
Open

ModoloDev wants to merge 2 commits into
Sapd:masterfrom
ModoloDev:master

Conversation

@ModoloDev

Copy link
Copy Markdown
Contributor

Changes made

  • implement the real Maxwell protocol
  • add custom EQ
  • fix sidetone being toggled on every call instead of set
  • report the current sidetone level
  • round inactive time up to the nearest value the headset supports
  • add protocol tests, including EQ coefficient reference vectors

Replace the fixed, captured packets with an implementation of the protocol the headset actually speaks: requests are built from command, key and value, split into HID reports, and matched against the reply the headset sends back. Errors reported by the headset now reach the user instead of being ignored.

Maxwell and Maxwell 2 share this code through a new AudezeMaxwellDevice base class, so each device file only holds what differs between them.

Add custom equalizer support for the original Maxwell. The ten band gains (-12 to 12 dB, whole steps) are written to the selected custom preset, applied immediately and stored on the headset.

Checklist

  • I adjusted the README (if needed)
  • For new features in HeadsetControl: I discussed it beforehand in Issues or Discussions and adhered to the wiki

Related to #460

Replace the fixed, captured packets with an implementation of the
protocol the headset actually speaks: requests are built from command,
key and value, split into HID reports, and matched against the reply
the headset sends back. Errors reported by the headset now reach the
user instead of being ignored.

Maxwell and Maxwell 2 share this code through a new AudezeMaxwellDevice
base class, so each device file only holds what differs between them.

Add custom equalizer support for the original Maxwell. The ten band
gains (-12 to 12 dB, whole steps) are written to the selected custom
preset, applied immediately and stored on the headset.

Also:
- fix sidetone being toggled on every call instead of set
- report the current sidetone level
- round inactive time up to the nearest value the headset supports
- add protocol tests, including EQ coefficient reference vectors
@ModoloDev

Copy link
Copy Markdown
Contributor Author

With the help of AI, I reverse-engineered the protocol used by the Audeze app and reimplemented it here, replacing the previous captured packets.

I could only test on my own original Maxwell, so I'd appreciate help validating:

@MonsterBagels, could you please check that nothing broke on the Maxwell 2? It now shares the protocol code with the original Maxwell, and I have no Maxwell 2 to test on.

@Nallebeorn, could you please test on your Maxwell as a second confirmation?

What to try:

  • headsetcontrol -b (battery)
  • headsetcontrol -s (read sidetone), then -s 64 and -s 0, checking that sidetone really turns on and off and that repeating the same command doesn't flip it
  • chatmix, inactive time, voice prompts, EQ preset and noise filter
  • original Maxwell only: volume limiter and the custom equalizer on a custom preset

Removed information about original Audeze Maxwell EQ edits.
@MonsterBagels

MonsterBagels commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

I can't help unfortunately, as I've sold my Maxwell 2 but good luck!

@ModoloDev

Copy link
Copy Markdown
Contributor Author

@AdrianKuriata could you please check that nothing broke on the Maxwell 2?

@Nallebeorn

Nallebeorn commented Oct 10, 2026 •

Copy link
Copy Markdown

Tested with my own (original) Maxwell (I don't have the 2 either), seems good!

-s flag can read sidetone, and set it in the 0..128 range (unlike before, when -s 0 toggled it on and off and no other value worked). It triggers the "Sidetone off" voice alert when setting it to 0, but never plays the "Sidetone on" alert. headsetcontrol -b also seems to work well, but in the past I've seen it apparently work well at first only to turn out to be unreliable over time, so let's see if this version holds up!

I did have to unplug and reinsert my dongle after installing this commit before any command worked (otherwise every operation timed out).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants